import os

OUTPUT      = "output"
BOOT_SRC    = "./bootloader/boot.asm"
BOOT_BIN    = "./output/boot.bin"
LOADER_SRC  = "./bootloader/loader.asm"
LOADER_BIN  = "./output/loader.bin"
IMG         = "./output/a.img"


def main():
    # os.path.exists(path) # path是文件夹或者文件的相对路径或者绝对路径
    # 创建文件夹 output
    if not os.path.exists(OUTPUT):
        os.mkdir(OUTPUT)

    # 编译 boot.asm
    src = BOOT_SRC
    out = BOOT_BIN
    cmd_str = "nasm " + src + " -o " + out
    print(cmd_str)
    os.system(cmd_str)

    # 编译 loader.asm
    src = LOADER_SRC
    out = LOADER_BIN
    cmd_str = "nasm " + src + " -o " + out
    print(cmd_str)
    os.system(cmd_str)

    # 创建一个 60M 的虚拟硬盘，由于搭了两套开发环境，所以这里 bximage 有两种命令格式
    # 使用 “bximage --help” 命令可获得 bximage 的用法
    # 另一个：bximage $@ -func="create" -hd=60 -imgmode="flat" -q
    cmd_str = "bximage " + IMG + ' -hd -size=60 -mode="flat" -q'
    print(cmd_str)
    os.system(cmd_str)

    # 将 boot.bin 写入硬盘 a.img 的第 0 个扇区
    cmd_str = "dd if=" + BOOT_BIN + " of=" + IMG + " bs=512 count=1 conv=notrunc"
    print(cmd_str)
    os.system(cmd_str)

	# dd if=$(BOOT_BIN) of=$(IMG) bs=512 count=1 conv=notrunc
	# 将 loader.bin 写入硬盘 a.img 的第 2 个扇区开始的连续 20 个扇区（10K）
    cmd_str = "dd if=" + LOADER_BIN + " of=" + IMG + " bs=512 count=20 seek=2 conv=notrunc"
    print(cmd_str)
    os.system(cmd_str)

    print("Success!")


if __name__ == '__main__':
    main()